Reading Appsettings.json File in Console Apps

कंसोल ऐप्स में Appsettings.json फ़ाइल पढ़ना

Console Application में appsettings.json फ़ाइल को पढ़ना, ASP.NET Core एप्लिकेशन में पढ़ने से थोड़ा अलग है क्योंकि Console एप्लिकेशन में डिफ़ॉल्ट रूप से ASP.NET Core का कॉन्फ़िगरेशन सिस्टम शामिल नहीं होता है। हालाँकि, .NET Core के साथ, आप NuGet पैकेजों का उपयोग करके उसी शक्तिशाली कॉन्फ़िगरेशन सिस्टम को अपनी Console एप्लिकेशन में एकीकृत कर सकते हैं।

आइए इसे उदाहरण के साथ समझते हैं:

चरण 1: नया Console एप्लिकेशन बनाएं

सबसे पहले, एक नया .NET Core Console एप्लिकेशन बनाएं:

dotnet new console -n MyConsoleAppConfig
cd MyConsoleAppConfig

चरण 2: आवश्यक NuGet पैकेज जोड़ें

आपको कॉन्फ़िगरेशन सिस्टम को सक्षम करने के लिए कुछ NuGet पैकेजों की आवश्यकता होगी। इन पैकेजों को अपने प्रोजेक्ट में जोड़ें:

dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.Json
dotnet add package Microsoft.Extensions.Configuration.Binder
  • Extensions.Configuration: कॉन्फ़िगरेशन मॉडल के लिए मुख्य एब्स्ट्रैक्शन प्रदान करता है।
  • Extensions.Configuration.Json: JSON फ़ाइलों से कॉन्फ़िगरेशन लोड करने के लिए प्रदाता प्रदान करता है।
  • Extensions.Configuration.Binder: कॉन्फ़िगरेशन अनुभागों को C# ऑब्जेक्ट्स से बाइंड करने की अनुमति देता है।

चरण 3: appsettings.json फ़ाइल बनाएं

अपने MyConsoleAppConfig प्रोजेक्ट फ़ोल्डर के रूट में एक appsettings.json फ़ाइल बनाएं। इस फ़ाइल में कुछ कॉन्फ़िगरेशन सेटिंग्स जोड़ें:

appsettings.json
{
  "AppSettings": {
    "AppName": "My Awesome Console App",
    "Version": "1.0.0",
    "MaxAttempts": 5
  },
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=MyLocalDb;Integrated Security=True;"
  },
  "EmailSettings": {
    "SmtpServer": "smtp.example.com",
    "Port": 587,
    "SenderEmail": "noreply@example.com"
  }
}

महत्वपूर्ण: appsettings.json फ़ाइल को आउटपुट डायरेक्टरी में कॉपी किया जाना चाहिए ताकि एप्लिकेशन इसे रनटाइम पर पढ़ सके। इसे करने के लिए, अपने प्रोजेक्ट फ़ाइल (.csproj) को एडिट करें और निम्नलिखित आइटमग्रुप जोड़ें:

MyConsoleAppConfig.csproj (Edit करें)
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.1" />
  </ItemGroup>
  <ItemGroup>
    <None Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

नोट: Microsoft.Extensions.Configuration पैकेजों के संस्करण आपके द्वारा उपयोग किए जा रहे .NET SDK के संस्करण के आधार पर भिन्न हो सकते हैं। ऊपर दिखाए गए उदाहरण .NET 8.0 के लिए हैं।

चरण 4: Program.cs में कॉन्फ़िगरेशन पढ़ें

अब, Program.cs फ़ाइल को एडिट करें ताकि appsettings.json से मान पढ़े जा सकें। हम ConfigurationBuilder का उपयोग करेंगे।

Program.cs
using Microsoft.Extensions.Configuration;
using System.IO;
namespace MyConsoleAppConfig
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. ConfigurationBuilder इंस्टेंस बनाएं
            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory()) // वर्तमान डायरेक्टरी को आधार पाथ के रूप में सेट करें
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); // appsettings.json फ़ाइल जोड़ें
            // 2. IConfiguration ऑब्जेक्ट को बिल्ड करें
            IConfiguration config = builder.Build();
            // 3. कॉन्फ़िगरेशन मानों को पढ़ें
            // A. सामान्य स्ट्रिंग मान पढ़ना
            string appName = config["AppSettings:AppName"];
            Console.WriteLine($"App Name: {appName}");
            // B. इंटिगर मान पढ़ना
            int maxAttempts = config.GetValue<int>("AppSettings:MaxAttempts");
            Console.WriteLine($"Max Attempts: {maxAttempts}");
            // C. कनेक्शन स्ट्रिंग पढ़ना
            string defaultConnection = config.GetConnectionString("DefaultConnection");
            Console.WriteLine($"Default Connection: {defaultConnection}");
            // D. एक सेक्शन को C# ऑब्जेक्ट में बाइंड करना
            // सबसे पहले, एक C# क्लास को डिफाइन करें जो आपके JSON सेक्शन को मैप करेगी
            var emailSettings = new EmailSettings();
            config.GetSection("EmailSettings").Bind(emailSettings);
            Console.WriteLine("\nEmail Settings:");
            Console.WriteLine($"  SMTP Server: {emailSettings.SmtpServer}");
            Console.WriteLine($"  Port: {emailSettings.Port}");
            Console.WriteLine($"  Sender Email: {emailSettings.SenderEmail}");
            Console.WriteLine("\nPress any key to exit.");
            Console.ReadKey();
        }
    }
    // EmailSettings क्लास जो appsettings.json के EmailSettings सेक्शन को मैप करेगी
    public class EmailSettings
    {
        public string SmtpServer { get; set; }
        public int Port { get; set; }
        public string SenderEmail { get; set; }
    }
}

कोड की व्याख्या:

  1. ConfigurationBuilder: यह कॉन्फ़िगरेशन स्रोतों को बनाने और एक साथ जोड़ने के लिए एक क्लास है।
  2. SetBasePath(Directory.GetCurrentDirectory()): यह बताता है कि कॉन्फ़िगरेशन फ़ाइलों को कहां खोजना है। GetCurrentDirectory() उस डायरेक्टरी को लौटाता है जहां आपकी एप्लिकेशन चल रही है (जो आमतौर पर bin/Debug/netX.0 होती है)।
  3. AddJsonFile("appsettings.json", optional: false, reloadOnChange: true):
    • "appsettings.json": JSON फ़ाइल का नाम।
    • optional: false: इसका मतलब है कि यह फ़ाइल आवश्यक है। यदि यह नहीं मिलती है, तो एप्लिकेशन एक अपवाद फेंकेगा। यदि आप इसे true पर सेट करते हैं, तो फ़ाइल न मिलने पर कोई त्रुटि नहीं होगी।
    • reloadOnChange: true: यह महत्वपूर्ण है। यदि आप रनटाइम पर json फ़ाइल में बदलाव करते हैं, तो एप्लिकेशन स्वचालित रूप से कॉन्फ़िगरेशन को पुनः लोड कर देगा।
  4. Build(): यह IConfiguration इंटरफ़ेस का एक इंस्टेंस बनाता है, जिसमें आपके द्वारा परिभाषित सभी कॉन्फ़िगरेशन सेटिंग्स होती हैं।
  5. मान पढ़ना:
    • config["Section:Key"]: यह इंडेक्सर सिंटैक्स सीधे नेस्टेड वैल्यू को स्ट्रिंग के रूप में एक्सेस करने के लिए उपयोग किया जाता है। "AppSettings:AppName" का मतलब है कि आप AppSettings सेक्शन के भीतर AppName कुंजी को एक्सेस कर रहे हैं।
    • GetValue<T>("Key"): यह एक्सटेंशन मेथड आपको किसी विशिष्ट प्रकार (int, bool, आदि) में मानों को पढ़ने की अनुमति देता है।
    • GetConnectionString("Name"): ConnectionStrings सेक्शन के तहत कनेक्शन स्ट्रिंग्स को पढ़ने के लिए यह एक सुविधाजनक एक्सटेंशन मेथड है।
  6. सेक्शन को ऑब्जेक्ट से बाइंड करना (Bind मेथड):
    • आप एक C# क्लास (जैसे EmailSettings) को परिभाषित कर सकते हैं जिसमें JSON सेक्शन की संरचना के समान गुण हों।
    • GetSection("EmailSettings").Bind(emailSettings): यह निर्दिष्ट सेक्शन (EmailSettings) को आपके EmailSettings ऑब्जेक्ट के गुणों से मैप (बाइंड) करता है। यह जटिल कॉन्फ़िगरेशन के लिए बहुत उपयोगी है, क्योंकि यह आपको मजबूत टाइपिंग के साथ मानों तक पहुंचने की अनुमति देता है।

चरण 5: एप्लिकेशन चलाएं

अब आप अपनी Console एप्लिकेशन चला सकते हैं:

dotnet run

आपको आउटपुट इस तरह दिखना चाहिए:

App Name: My Awesome Console App

Max Attempts: 5

Default Connection: Server=localhost;Database=MyLocalDb;Integrated Security=True;

Email Settings:

  SMTP Server: smtp.example.com

  Port: 587

  Sender Email: noreply@example.com

Press any key to exit.

इस तरह, आप अपने .NET Core Console एप्लिकेशन में appsettings.json फ़ाइल से कॉन्फ़िगरेशन सेटिंग्स को प्रभावी ढंग से पढ़ और उपयोग कर सकते हैं।

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks